﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Aga.Informatizacion.Documentos.DocumentoService;

namespace Aga.Informatizacion.Documentos
{
    public partial class CargaManual : Form
    {
        private string currentFolder;
        //private List<string> currentFolderImages;
        //private List<string> selectedImages;
        //private int currentImageIndex;
        //private ImageList imageList;

        public string CurrentFolder
        {
            get
            {
                return currentFolder;
            }
            set
            {
                currentFolder = value;
                txtCarpetaActual.Text = currentFolder;
            }
        }

        public CargaManual()
        {
            InitializeComponent();

            Load += new EventHandler(CargaManual_Load);
        }

        void CargaManual_Load(object sender, EventArgs e)
        {
            // creo las listas para llevar el control de las imagenes
            // y su seleccion
            //currentFolderImages = new List<string>();
            //selectedImages = new List<string>();
            //imageList = new ImageList();

            //// configuro la lista de imagenes
            //lstSelectedImages.LargeImageList = imageList;
            //lstSelectedImages.Scrollable = true;
            //lstSelectedImages.CheckBoxes = true;
        }

        private void btnCambiar_Click(object sender, EventArgs e)
        {
            // obtengo el path de la carpeta de la cual obtener los 
            // archivos e imagenes
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            dialog.SelectedPath = @"C:\Users\daniel.HUDDLE\Documents\My Dropbox\AGA\HOPE\00000002";
            DialogResult result = dialog.ShowDialog();
            if (result == DialogResult.OK)
            {
                // limpio todo
                Clear();

                // seteo la carpeta seleccionada
                CurrentFolder = dialog.SelectedPath;

                // cargo las imagenes
                LoadFolderImages();
            }
        }

        private void Clear()
        {
            // limpio las listas que no son necesarias
            folderImagesList.Images.Clear();
            lstSelectedImages.Items.Clear();
        }

        /// <summary>
        /// Este metodo se encarga de tomar todas las imagenes
        /// de una carpeta y cargarlas en la aplicacion
        /// </summary>
        private void LoadFolderImages()
        {
            // obtengo la lista de imagenes de la carpeta
            string searchPattern = "*.jpg";
            string[] directory = Directory.GetFiles(CurrentFolder, searchPattern, SearchOption.TopDirectoryOnly);

            // agrego las imagenes a la lista de imagenes y al
            // lst de imagenes
            foreach (var item in directory)
            {
                // agrego las imagenes al imageList para el select
                folderImagesList.Images.Add(Image.FromFile(item));
                
                ListViewItem lvitem = new ListViewItem( new string[] { Path.GetFileName(item), item }, folderImagesList.Images.Count - 1);
                lstSelectedImages.Items.Add(lvitem);
            }
        }

        /// <summary>
        /// Este metodo se encarga de mostrar una imagen en el panel
        /// principal de la aplicacion
        /// </summary>
        /// <param name="imagePath">Path de la imagen a mostrar</param>
        private void ShowImage(string imagePath)
        {
            Image image = Image.FromFile(imagePath);
            pbxImagenActual.Width = image.Width;
            pbxImagenActual.Height = image.Height;
            pbxImagenActual.Image = image;
        }

        private int selectedPreviows = -1;
        private void lstSelectedImages_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (selectedPreviows != -1 && selectedPreviows < e.ItemIndex)
                lstSelectedImages.Items[selectedPreviows].Checked = true;

            ShowImage(e.Item.SubItems[1].Text);

            selectedPreviows = e.ItemIndex;
        }

        /// <summary>
        /// Inicializa el listado de imagenes
        /// </summary>
        //private void ProcessImageList()
        //{
        //    // chequeo que existan imagenes a procesar
        //    if (currentFolderImages.Count == 0)
        //        return;

        //    // inicializo el procesamiento de imagenes
        //    currentImageIndex = 0;
        //    ShowImage(currentFolderImages[currentImageIndex]);
        //    lstSelectedImages.Items[currentImageIndex].Checked = true;
        //}

        /// <summary>
        /// Comportamiento de mostrar la imagen siguiente
        /// </summary>
        //private void NextImage()
        //{
        //    if (currentImageIndex == (currentFolderImages.Count-1))
        //        return;

        //    // cuando pasa a la siguiente selecciono la actual
        //    selectedImages.Add(currentFolderImages[currentImageIndex]);

        //    // me muevo a la imagen siguiente chequeando la automaticamente
        //    currentImageIndex++;
        //    ShowImage(currentFolderImages[currentImageIndex]);
        //    lstSelectedImages.Items[currentImageIndex].Checked = true;
        //}

        /// <summary>
        /// Comportamiento de mostrar la imagen anterior
        /// </summary>
        //private void PreviousImage()
        //{
        //    if (currentImageIndex == 0)
        //        return;

        //    // cuando vuelve para atras, deselecciono
        //    selectedImages.Remove(currentFolderImages[currentImageIndex]);
        //    lstSelectedImages.Items[currentImageIndex].Checked = false;

        //    // vuelvo a la imagen anterior deseleccionando antes la siguiente
        //    currentImageIndex--;
        //    ShowImage(currentFolderImages[currentImageIndex]);
        //}


        private int? TryGetNullableValue(TextBox control)
        {
            int value;
            if (int.TryParse(control.Text, out value))
                return new Nullable<int>(value);
            else
                return new Nullable<int>();
        }

        private void btnGuardarDocumento_Click(object sender, EventArgs e)
        {
            //    // obtengo los datos de la pantalla
            string nombre = txtNombre.Text;
            int numeroDesde = int.Parse(txtNumeroDesde.Text);
            int? numeroHasta = TryGetNullableValue(txtNumeroHasta);
            int? caja = TryGetNullableValue(txtCaja);
            int? lote = TryGetNullableValue(txtLote);
            string detalle = txtDetalle.Text;

            foreach (var item in lstSelectedImages.CheckedItems)
            {
                lsvProcesados.Items.Add(
                    new ListViewItem(
                        new string[] {
                            nombre,
                            numeroDesde.ToString(),
                            numeroHasta.ToString(),
                            caja.ToString(),
                            lote.ToString(),
                            (item as ListViewItem).SubItems[0].Text,
                            (item as ListViewItem).SubItems[0].Text,
                            detalle
                        }
                    ));
            }
        }

        //private void btnGuardarDocumento_Click(object sender, EventArgs e)
        //{
        //    // obtengo los datos del cliente Hope desde el archivo de configuracion
        //    int tipoDocumentoId = ConfiguracionHOPE.TipoDocumentoId;
        //    int clienteId = ConfiguracionHOPE.ClienteId;



        //    // creo el proxy del servicio
        //    DocumentoDataServiceClient client = new DocumentoDataServiceClient();

        //    // chequeo si el documento existe
        //    DocumentoDto documento = client.ObtenerDocumento(clienteId, tipoDocumentoId, numeroDesde, (caja.HasValue) ? caja.Value : 0);

        //    // si no existe, lo creo y lo guardo
        //    if (documento == null)
        //    {
        //        // cargo el dto del documento
        //        documento = new DocumentoDto()
        //        {
        //            ClienteId = clienteId,
        //            TipoDocumentoId = tipoDocumentoId,
        //            Nombre = txtNombre.Text,
        //            NumeroDesde = numeroDesde,
        //            NumeroHasta = numeroHasta,
        //            Caja = caja,
        //            Lote = lote,
        //            Detalle = detalle
        //        };

        //        // lo guardo y le obtengo el id
        //        documento.Id = client.NuevoDocumento(documento);
        //    }

        //    // le subo las imagenes al documento
        //    //foreach (var item in lstSelectedImages.SelectedItems)
        //    //{
        //    //    client.NuevaImagen(new ImagenDto() { DocumentoId = documento.Id, Nombre = Path.GetFileName(item) });
        //    //}

        //    client.Close();
        //}

    }
}
